package com.young.shop.api.dao;

import com.young.shop.pojo.entity.Order;
import com.young.shop.pojo.vo.OrderServiceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 订单数据处理接口
 */
@Repository
public interface OrderMapper {
    /**
     * 查询用户id与订单状态查询当前状态的所有订单
     * @param userId 用户id
     * @return
     */
    List<Order> selectByUserId(@Param("userId") Long userId);

    /**
     * 根据订单ID，用户id,新订单状态修改订单状态
     * @param userId 用户id
     * @param orderId 订单id
     * @param newStatus 新的订单状态
     * @return
     */
    int upDataStatus(@Param("userId") Long userId,@Param("orderId") Long orderId,@Param("newStatus") int newStatus);

    /**
     * 根据订单状态、用户id查询状态订单
     * @param userId 用户id
     * @param status 订单状态
     * @return
     */
    List<OrderServiceVO> selectByStatus(@Param("userId") Long userId,@Param("status") int status);

    /**
     * 根据订单id查询订单详细内容
     * @param orderId 订单id
     * @return
     */
    List<OrderServiceVO> selectByOrderId(@Param("orderId") Long orderId);

    /**
     * 查询订单状态为1的所有订单时间
     * @return 订单创建时间，订单di
     */
    List<OrderServiceVO> selectByStatusOne();

    /**
     * 修改超时订单
     * @param orderId
     * @return
     */
    int upDateByOrderId(@Param("orderId") Long orderId);

    /**
     * 根据订单id修改订单状态为2（已支付）
     * @param orderId
     * @return
     */
    int upDatePaymentOrder(@Param("orderId")String orderId);

    /**
     * 根据订单id修改订单状态为6(已取消)（已经完成退款）
     * @param orderId 用户id
     * @return
     */
    int upDateRefundByOrderId(@Param("orderId") String orderId);

    /**
     * 根据订单id修改订单状态为8（申请退款）
     * @param orderId
     * @return
     */
    int upDateCancellationByOrderId(@Param("orderId") Long orderId);

    /**
     * 根据订单id修改订单状态为0（删除订单）
     * @param orderId
     * @return
     */
    int upDateConfirmReceipt(@Param("orderId")Long orderId);

    /**
     * 根据订单id修改订单状态为4(待评价)
     * @param orderId
     * @return
     */
    int upDateDeleteOrder(@Param("orderId") Long orderId);
}
